Префиксом строки S назовем любую подстроку вида S[1..k], k ≤ size(S) (size(S) – длина строки).
Префикс может быть как пустым, так и совпадать с самой строкой. Если префикс не
является пустым и не совпадает со строкой S, то его называют собственным
префиксом строки S. Напишите программу, которая выводит количество
префиксов и все собственные префиксы подстроки S[i..j] в
порядке возрастания их длины.
Вход. Первая
строка содержит S, длина которого не превышает 100. Во второй строке записаны
два индекса i и j (1 ≤ i ≤
size(S), 1 ≤ j ≤ size(S)).
Выход. В
первой строке вывести количество префиксов подстроки S[i..j].
В следующих строках вывести все собственные префиксы данной подстроки. Формат
выходных данных приведен в примере.
Пример входа |
Пример выхода |
abracadabra 2 5 |
5 b br bra |
строки
Количество префиксов равно j – i + 2. Вычтем из i и j
единицу, чтобы индексация велась с нуля.
Выводим все собственные префиксы s[i..k] подстроки s[i..j]
(i ≤ k < j).
Реализация алгоритма
Объявим символьные
массивы.
char s[110], temp[110];
Читаем входные данные.
gets(s);
scanf("%d %d", &i, &j);
i--; j--;
Выводим количество
префиксов.
printf("%d\n", j - i + 2);
Выводим все собственные префиксы s[i..k] подстроки s[i..j].
Для этого должно быть i ≤ k < j.
for (k = i; k < j; k++)
{
Копируем s[i..k] в массив
temp. В конце строки temp ставим
ноль байт.
strncpy(temp, s + i, k - i + 1);
temp[k -
i + 2] = 0;
Выводим префикс.
puts(temp);
}
Java реализация
import java.util.*;
public class Main
{
public static void main(String[] args)
{
Scanner con = new Scanner(System.in);
String s = con.nextLine();
int i = con.nextInt();
int j = con.nextInt();
System.out.println(j - i + 2);
for(int k = i; k < j; k++)
{
String s1 = s.substring(i-1,k);
System.out.println(s1);
}
con.close();
}
}
Python реализация
s = input()
i, j = map(int,input().split())
print (j - i + 2)
for k in range(i, j):
print (s[i-1:k])